Memory controllers are used for transferring data between a host device and a non-volatile semiconductor memory device. Such memory controllers typically contain a buffer for temporarily storing data that is in the process of being written to or read from the memory device. Errors sometimes occur during data transfers between the host and the memory device. Some errors may occur when data that is in the buffer is overwritten prior to being transferred out of the buffer. Other errors occur when an attempt is made to transfer the wrong data or non-existent data out of the buffer. Therefore, there exists a need for systems and methods for buffer management that solve these and other problems associated with memory controllers.